package com.leetcode.offer;

/**
 * @author zfl
 * @Classname HammingWeight
 * @Description 二进制中1的个数
 * @Date 2020/10/18 16:11
 */
public class HammingWeight {

    /**
     * @param n
     * @return
     * 当n为32位时，temp最后内存溢出，故此方法失败
     */
    public static int hammingWeight1(int n) {
        int temp = 1,count = 0;
        while (temp <= n) {
            if((n & temp) != 0) {
                count++;
            }
            temp = temp << 1;
        }
        return count;
    }

    /**
     * @param n
     * @return
     * 执行用时：1 ms, 在所有 Java 提交中击败了99.49%的用户
     * 内存消耗：35.4 MB, 在所有 Java 提交中击败了97.18%的用户
     */
    public static int hammingWeight(int n) {
        int temp = 1,count = 0;
        for (int i = 0; i < 32; i++) {
            if((n & temp) != 0) {
                count++;
            }
            temp <<= 1;
        }
        return count;
    }
}
